package com.feeyin.radar.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFilter
  implements Filter
{
  private String url;
  private static ThreadLocal threadLocalUserId = new ThreadLocal();

  public static Integer getThreadLocalUserId()
  {
    Integer userId = (Integer)threadLocalUserId.get();
    return userId;
  }

  public static void setThreadLocalUserId(Integer userId) {
    threadLocalUserId.set(userId);
  }

  public void destroy()
  {
  }

  public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
    throws IOException, ServletException
  {
    HttpServletRequest request = (HttpServletRequest)arg0;
    HttpServletResponse response = (HttpServletResponse)arg1;
    HttpSession session = request.getSession();

    String uri = request.getRequestURI();
    String path = request.getContextPath();
    uri = uri.substring(path.length());
    if (!this.url.equals(uri)) {
      Integer userId = (Integer)session.getAttribute("userId");

      if (userId == null)
      {
        response.sendRedirect("index.jsp");

        return;
      }
      try
      {
        setThreadLocalUserId(userId);
        arg2.doFilter(arg0, arg1);
      }
      finally {
        setThreadLocalUserId(null);
      }
    }
    else {
      arg2.doFilter(arg0, arg1);
    }
  }

  public void init(FilterConfig arg0) throws ServletException
  {
    this.url = "/login.do";
  }
}